<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Rekursive Programmierung</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Rekursive_Programmierung"> <link href="./_mw_/ext.math.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Rekursive_Programmierung rootpage-Rekursive_Programmierung skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Rekursive Programmierung</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Bei der <b>rekursiven Programmierung</b> ruft sich eine <a href="Prozedur_(Programmierung)" title="Prozedur (Programmierung)">Prozedur</a>, <a href="Funktion_(Informatik)" class="mw-redirect" title="Funktion (Informatik)">Funktion</a> oder <a href="Unterprogramm#Terminologie" title="Unterprogramm">Methode</a> in einem <a href="Computerprogramm" title="Computerprogramm">Computerprogramm</a> selbst wieder auf (d. h. enthält eine <a href="Rekursion" title="Rekursion">Rekursion</a>). Auch der gegenseitige Aufruf stellt eine Rekursion dar.
</p><p>Wichtig bei der <a href="Rekursion" title="Rekursion">rekursiven</a> <a href="Programmierung" title="Programmierung">Programmierung</a> ist eine <a href="Abbruchbedingung" title="Abbruchbedingung">Abbruchbedingung</a> in dieser <a href="Funktion_(Programmierung)" title="Funktion (Programmierung)">Funktion</a>, weil sich das rekursive <a href="Computerprogramm" title="Computerprogramm">Programm</a> sonst theoretisch unendlich oft selbst aufrufen würde.
</p><p>Rekursive <a href="Programmierung" title="Programmierung">Programmierung</a> kann unter anderem in <a href="Prozedurale_Programmierung" title="Prozedurale Programmierung">prozeduralen</a> und <a href="Objektorientierte_Programmierung" title="Objektorientierte Programmierung">objektorientierten</a> <a href="Programmiersprache" title="Programmiersprache">Programmiersprachen</a> angewandt werden. Obwohl diese Sprachen in ihrem Sprachstandard die <a href="Rekursion" title="Rekursion">Rekursion</a> ausdrücklich zulassen, stellen Selbstaufrufe und gegenseitige Aufrufe hier (aufgrund der verwendeten <a href="Programmierparadigma" title="Programmierparadigma">Programmierparadigmen</a>) jedoch eher die Ausnahme dar. Auch wenn in der Praxis zur Verbesserung des <a href="Programmierstil" title="Programmierstil">Programmierstils</a> auch hier durchaus häufig auf Rekursion zurückgegriffen wird, sind die meisten <a href="Funktion_(Programmierung)" title="Funktion (Programmierung)">Funktionen</a> in diesen Sprachen doch rein <a href="Iterative_Programmierung" title="Iterative Programmierung">iterativ</a>.
</p><p>In einigen Sprachen, wie z. B. in manchen <a href="Funktionale_Programmiersprache" class="mw-redirect" title="Funktionale Programmiersprache">funktionalen Programmiersprachen</a> oder <a href="Makroprozessor" title="Makroprozessor">Makroprozessoren</a>, muss die rekursive Programmiermethode zwingend verwendet werden, da <a href="Iterative_Programmierung" title="Iterative Programmierung">iterative</a> Sprachkonstrukte fehlen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Beispiele">Beispiele</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Fakultät"><span id="Fakult.C3.A4t"></span>Fakultät</h3></div>
<p>Ein Beispiel für die Verwendung einer <a href="Rekursion" title="Rekursion">rekursiven</a> <a href="Programmierung" title="Programmierung">Programmierung</a> ist die Berechnung der <a href="Fakult%C3%A4t_(Mathematik)" title="Fakultät (Mathematik)">Fakultät</a> einer Zahl. Die Fakultät ist das <a href="Produkt_(Mathematik)" title="Produkt (Mathematik)">Produkt</a> aller ganzen Zahlen von 1 bis zu dieser Zahl. Die Fakultät von 4 ist also <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 1\cdot 2\cdot 3\cdot 4=24}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mn>1</mn>
<mo>⋅<!-- ⋅ --></mo>
<mn>2</mn>
<mo>⋅<!-- ⋅ --></mo>
<mn>3</mn>
<mo>⋅<!-- ⋅ --></mo>
<mn>4</mn>
<mo>=</mo>
<mn>24</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle 1\cdot 2\cdot 3\cdot 4=24}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/55c21d2f5c8b7ad0888749f82f43fae50cac01ab.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:15.111ex; height:2.176ex;" alt="{\displaystyle 1\cdot 2\cdot 3\cdot 4=24}" loading="lazy"></span>.
</p><p>Mathematiker definieren die Fakultät meistens so (eine rekursive Definition):
</p>
<ul><li>Die Fakultät der Zahl 0 ist definitionsgemäß 1.</li>
<li>Die Fakultät einer ganzen Zahl, die größer als Null ist, ist das Produkt dieser Zahl mit der Fakultät der nächstkleineren ganzen Zahl.</li></ul>
<p>Die Definition funktioniert so:
</p>
<dl><dd><ul><li>Will man die <b>Fakultät von 4</b> berechnen, so muss man zunächst die Fakultät von 3 berechnen und das Ergebnis mit 4 multiplizieren.</li></ul>
<dl><dd><ul><li>Will man die Fakultät von 3 berechnen, so muss man zunächst die Fakultät von 2 berechnen und das Ergebnis mit 3 multiplizieren.</li></ul>
<dl><dd><ul><li>Will man die Fakultät von 2 berechnen, so muss man zunächst die Fakultät von 1 berechnen und das Ergebnis mit 2 multiplizieren.</li></ul>
<dl><dd><ul><li>Will man die Fakultät von 1 berechnen, so muss man zunächst die Fakultät von 0 berechnen und das Ergebnis mit 1 multiplizieren.</li></ul>
<dl><dd><ul><li>Die Fakultät von 0 ist nach Definition 1.</li></ul></dd></dl>
<ul><li>Die Fakultät von 1 ist also 1*1=1</li></ul></dd></dl>
<ul><li>Die Fakultät von 2 ist also 1*1*2=2</li></ul></dd></dl>
<ul><li>Die Fakultät von 3 ist also 1*1*2*3=6</li></ul></dd></dl>
<ul><li>Die Fakultät von 4 ist also 1*1*2*3*4=24</li></ul></dd></dl>
<p>In einer <a href="Programmiersprache" title="Programmiersprache">Programmiersprache</a> wie Pascal, die rekursive Programmierung zulässt, kann man die <a href="Fakult%C3%A4t_(Mathematik)" title="Fakultät (Mathematik)">Fakultät</a> folgendermaßen eingeben:
</p><p>Man definiert eine <a href="Funktion_(Programmierung)" title="Funktion (Programmierung)">Funktion</a> <i>factorial</i>, die eine Zahl <i>x</i> als Eingabewert bekommt. Diese Funktion multipliziert <i>x</i> mit dem Rückgabewert von <i>factorial(x - 1)</i> außer bei <i>x = 0</i>, dann liefert die Funktion das Ergebnis 1. Dies ist die Abbruchbedingung:
</p><p><b>Rekursive Implementation der Fakultätsfunktion </b>
</p>
<div class="mw-highlight mw-highlight-lang-pascal mw-content-ltr" dir="ltr"><pre><span></span><span class="k">function</span><span class="w"> </span><span class="nf">factorial</span><span class="p">(</span><span class="n">x</span><span class="o">:</span><span class="w"> </span><span class="kt">Integer</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="kt">Integer</span><span class="o">;</span>
<span class="k">begin</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">then</span>
<span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="mi">1</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">factorial</span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="o">;</span>
<span class="k">end</span><span class="o">;</span>
</pre></div>
<p>Mit der Startzahl <i>x = 4</i> würde der <a href="Computer" title="Computer">Computer</a> rechnen:
</p>
<pre>4 * (3 * (2 * (1 * factorial(0))))
</pre>
<p>heraus kommt dann das richtige Ergebnis, nämlich 24.
</p>
<div class="mw-heading mw-heading3"><h3 id="Binäre_Suche"><span id="Bin.C3.A4re_Suche"></span>Binäre Suche</h3></div>
<p>Die <a href="Bin%C3%A4re_Suche" title="Binäre Suche">binäre Suche</a> in einem vorsortierten <a href="Feld_(Datentyp)" class="mw-redirect" title="Feld (Datentyp)">Array</a> lässt sich <a href="Rekursion" title="Rekursion">rekursiv</a> <a href="Implementierung" title="Implementierung">implementieren</a>. Wenn das mittlere Element kleiner als das gesuchte Element ist, wird die hintere Hälfte des Arrays rekursiv durchsucht. Wenn es größer als das gesuchte Element ist, wird die vordere Hälfte des Arrays rekursiv durchsucht. Ist es gleich dem gesuchten Element, ist die Suche beendet.
</p><p>Die Abbruchbedingung für die <a href="Rekursion" title="Rekursion">Rekursion</a> ist erfüllt, wenn das mittlere Element gleich dem gesuchten Element ist, die Suche also erfolgreich ist, oder wenn der Endindex kleiner als der Startindex ist, die Suche also erfolglos ist.
</p><p>
Die folgende <a href="Funktion_(Programmierung)" title="Funktion (Programmierung)">Funktion</a> (<a href="Methode_(Programmierung)" title="Methode (Programmierung)">Methode</a>) für die <a href="Rekursion" title="Rekursion">rekursive</a> <a href="Bin%C3%A4re_Suche" title="Binäre Suche">binäre Suche</a> ist in der <a href="Programmiersprache" title="Programmiersprache">Programmiersprache</a> <a href="C-Sharp" title="C-Sharp">C#</a>:</p><div class="mw-highlight mw-highlight-lang-c# mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="nf">RekursiveBinaereSuche</span><span class="p">(</span><span class="kt">int</span><span class="p">[]</span><span class="w"> </span><span class="n">werte</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">gesuchterWert</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">startIndex</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">endIndex</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">endIndex</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">startIndex</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Wenn Element nicht gefunden, dann null zurückgeben</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">null</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">mittlererIndex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">startIndex</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">endIndex</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">werte</span><span class="p">[</span><span class="n">mittlererIndex</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">gesuchterWert</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Wenn Element gefunden, dann Index zurückgeben</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">mittlererIndex</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">werte</span><span class="p">[</span><span class="n">mittlererIndex</span><span class="p">]</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">gesuchterWert</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Rekursiver Aufruf der Funktion für die hintere Hälfte</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nf">RekursiveBinaereSuche</span><span class="p">(</span><span class="n">werte</span><span class="p">,</span><span class="w"> </span><span class="n">gesuchterWert</span><span class="p">,</span><span class="w"> </span><span class="n">mittlererIndex</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">endIndex</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Rekursiver Aufruf der Funktion für die vordere Hälfte</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nf">RekursiveBinaereSuche</span><span class="p">(</span><span class="n">werte</span><span class="p">,</span><span class="w"> </span><span class="n">gesuchterWert</span><span class="p">,</span><span class="w"> </span><span class="n">startIndex</span><span class="p">,</span><span class="w"> </span><span class="n">mittlererIndex</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Effizienz">Effizienz</h2></div>
<p><a href="Rekursion" title="Rekursion">Rekursive</a> <a href="Computerprogramm" title="Computerprogramm">Programme</a> haben in der Regel keine gute <a href="Performance_(Informatik)" class="mw-redirect" title="Performance (Informatik)">Performance</a>. Durch die wiederholten Funktionsaufrufe (Inkarnationen) wird immer wieder derselbe Methodeneintrittscode bearbeitet und bei jeder Inkarnation der <a href="Prozesskontext" title="Prozesskontext">Kontext</a> gesichert, was zu zusätzlichem <a href="Programmcode" title="Programmcode">Programmcode</a> und höherem <a href="Arbeitsspeicher" title="Arbeitsspeicher">Arbeitsspeicherverbrauch</a> führt. Alle rekursiven <a href="Algorithmus" title="Algorithmus">Algorithmen</a> lassen sich jedoch auch durch <a href="Iterative_Programmierung" title="Iterative Programmierung">iterative Programmierung</a> implementieren und umgekehrt.
</p>
<div class="mw-heading mw-heading3"><h3 id="Fakultät_2"><span id="Fakult.C3.A4t_2"></span>Fakultät</h3></div>
<p>Man hätte die <a href="Fakult%C3%A4t_(Mathematik)" title="Fakultät (Mathematik)">Fakultät</a> auch so <a href="Implementierung" title="Implementierung">implementieren</a> können:
</p>
<div class="mw-highlight mw-highlight-lang-pascal mw-content-ltr" dir="ltr"><pre><span></span><span class="k">function</span><span class="w"> </span><span class="nf">factorial</span><span class="p">(</span><span class="n">x</span><span class="o">:</span><span class="w"> </span><span class="kt">Integer</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="kt">Integer</span><span class="o">;</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">i</span><span class="o">,</span><span class="w"> </span><span class="n">number</span><span class="o">:</span><span class="w"> </span><span class="kt">Integer</span><span class="o">;</span>
<span class="k">begin</span>
<span class="w"> </span><span class="n">number</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="mi">1</span><span class="o">;</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="k">do</span>
<span class="w"> </span><span class="n">number</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="n">number</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">i</span><span class="o">;</span>
<span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="n">number</span><span class="o">;</span>
<span class="k">end</span><span class="o">;</span>
</pre></div>
<p>Hierbei gilt die Regel, dass für einfache Probleme eine <a href="Iterative_Programmierung" title="Iterative Programmierung">iterative</a> Implementierung häufig effizienter ist. So sollte z. B. auch die Fakultätsfunktion der Effizienz wegen in der Praxis iterativ implementiert werden. Bei komplizierten Problemstellungen (z. B. Aufgaben mit <a href="Baum_(Graphentheorie)" title="Baum (Graphentheorie)">Bäumen</a>) hingegen lohnt sich oftmals der Einsatz einer rekursiven Lösung, da für solche Probleme eine iterative Formulierung schnell sehr unübersichtlich – und ineffizient – werden kann, da im schlimmsten Fall der <a href="Stapelspeicher" title="Stapelspeicher">Stack</a> durch den iterativen <a href="Algorithmus" title="Algorithmus">Algorithmus</a> selbst verwaltet werden muss, was sonst der <a href="Prozessor" title="Prozessor">Prozessor</a> direkt erledigt.
</p><p>Nicht alle <a href="H%C3%B6here_Programmiersprache" title="Höhere Programmiersprache">höheren Programmiersprachen</a> lassen rekursive Aufrufe zu. Ein Beispiel dazu ist älteres <a href="Fortran" title="Fortran">Fortran</a>. Ab Fortran 90 sind rekursive Aufrufe möglich. Andere <a href="Programmiersprache" title="Programmiersprache">Programmiersprachen</a> sind dagegen grundsätzlich rekursiv (wie z. B. <a href="Prolog_(Programmiersprache)" title="Prolog (Programmiersprache)">Prolog</a>). Solche rekursiven Programmiersprachen und auch andere Sprachen wie z. B. <a href="Scheme" title="Scheme">Scheme</a> setzen die <a href="Rekursion" title="Rekursion">Rekursion</a> meistens effizient um.
</p>
<div class="mw-heading mw-heading2"><h2 id="Implementierung">Implementierung</h2></div>
<p><a href="Rekursion" title="Rekursion">Rekursion</a> wird in der Regel durch einen <a href="Stapelspeicher" title="Stapelspeicher">Stack</a> implementiert, der die Rücksprungadressen, aber auch alle lokalen Variablen und eventuell Funktionsergebnisse aufnimmt. Würde man, wie im obenstehenden Beispiel, die <a href="Fakult%C3%A4t_(Mathematik)" title="Fakultät (Mathematik)">Fakultät</a> von 4 berechnen, so würde jeder Aufruf folgende Informationen auf den Stack legen:
</p>
<ol><li>Platz für Ergebnis</li>
<li>Argument <i>x</i></li>
<li>Rücksprungadresse</li></ol>
<p>Zunächst würde im Hauptprogramm also <i>fac(4)</i> aufgerufen und damit die folgenden Informationen auf den <a href="Stapelspeicher" title="Stapelspeicher">Stack</a> gelegt:
</p>
<table border="0" cellpadding="3">
<tbody><tr>
<td><b>Stapelanfang</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">1
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">2
</td>
<td bgcolor="#C0C0FF" align="center"><b>4</b> (Argument)
</td></tr>
<tr>
<td><b>Stapelzeiger</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">3
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse ins Hauptprogramm</i>
</td></tr></tbody></table>
<p>Die Fakultätsfunktion prüft jetzt, ob das Argument 0 ist. Da dies nicht der Fall ist, wird <i>4*fac(3)</i> berechnet. Zunächst muss also <i>fac</i> mit dem Argument 3 aufgerufen werden:
</p>
<table border="0" cellpadding="3">
<tbody><tr>
<td><b>Stapelanfang</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">1
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">2
</td>
<td bgcolor="#C0C0FF" align="center"><b>4</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">3
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse ins Hauptprogramm</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">4
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">5
</td>
<td bgcolor="#C0C0FF" align="center"><b>3</b> (Argument)
</td></tr>
<tr>
<td><b>Stapelzeiger</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">6
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr></tbody></table>
<p>Das Argument ist wieder ungleich 0, also geht’s weiter mit <i>3*fac(2)</i>.
</p>
<table border="0" cellpadding="3">
<tbody><tr>
<td><b>Stapelanfang</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">1
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">2
</td>
<td bgcolor="#C0C0FF" align="center"><b>4</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">3
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse ins Hauptprogramm</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">4
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">5
</td>
<td bgcolor="#C0C0FF" align="center"><b>3</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">6
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">7
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">8
</td>
<td bgcolor="#C0C0FF" align="center"><b>2</b> (Argument)
</td></tr>
<tr>
<td><b>Stapelzeiger</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">9
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr></tbody></table>
<p>Das Argument ist wieder ungleich 0, also<i>2*fac(1)</i>.
</p>
<table border="0" cellpadding="3">
<tbody><tr>
<td><b>Stapelanfang</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">1
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">2
</td>
<td bgcolor="#C0C0FF" align="center"><b>4</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">3
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse ins Hauptprogramm</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">4
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">5
</td>
<td bgcolor="#C0C0FF" align="center"><b>3</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">6
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">7
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">8
</td>
<td bgcolor="#C0C0FF" align="center"><b>2</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">9
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">10
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">11
</td>
<td bgcolor="#C0C0FF" align="center"><b>1</b> (Argument)
</td></tr>
<tr>
<td><b>Stapelzeiger</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">12
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr></tbody></table>
<p>Das Argument ist wieder ungleich 0, also<i>1*fac(0)</i>.
</p>
<table border="0" cellpadding="3">
<tbody><tr>
<td><b>Stapelanfang</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">1
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">2
</td>
<td bgcolor="#C0C0FF" align="center"><b>4</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">3
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse ins Hauptprogramm</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">4
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">5
</td>
<td bgcolor="#C0C0FF" align="center"><b>3</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">6
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">7
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">8
</td>
<td bgcolor="#C0C0FF" align="center"><b>2</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">9
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">10
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">11
</td>
<td bgcolor="#C0C0FF" align="center"><b>1</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">12
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">13
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">14
</td>
<td bgcolor="#C0C0FF" align="center"><b>0</b> (Argument)
</td></tr>
<tr>
<td><b>Stapelzeiger</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">15
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr></tbody></table>
<p>Jetzt ist das Argument 0, das Ergebnis also 1. Wir holen die Rücksprungadresse und das Argument vom <a href="Stapelspeicher" title="Stapelspeicher">Stack</a> und schreiben die 1 in den dafür vorgesehenen Platz. Der <a href="R%C3%BCcksprung" class="mw-redirect" title="Rücksprung">Rücksprung</a> führt in die Fakultätsfunktion zurück:
</p>
<table border="0" cellpadding="3">
<tbody><tr>
<td><b>Stapelanfang</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">1
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">2
</td>
<td bgcolor="#C0C0FF" align="center"><b>4</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">3
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse ins Hauptprogramm</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">4
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">5
</td>
<td bgcolor="#C0C0FF" align="center"><b>3</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">6
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">7
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">8
</td>
<td bgcolor="#C0C0FF" align="center"><b>2</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">9
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">10
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">11
</td>
<td bgcolor="#C0C0FF" align="center"><b>1</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">12
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr>
<tr>
<td><b>Stapelzeiger</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">13
</td>
<td bgcolor="#C0C0FF" align="center"><b>1</b> (Ergebnis)
</td></tr></tbody></table>
<p>Jetzt kann man das Ergebnis mit dem Argument multiplizieren (1*1). Das neue Ergebnis ist wieder 1. Die <a href="R%C3%BCcksprungadresse" class="mw-redirect" title="Rücksprungadresse">Rücksprungadresse</a> und das Argument werden vom <a href="Stapelspeicher" title="Stapelspeicher">Stack</a> geholt und das neue Ergebnis in den dafür vorgesehenen Platz geschrieben. <a href="R%C3%BCcksprung" class="mw-redirect" title="Rücksprung">Rücksprung</a> in die Fakultätsfunktion:
</p>
<table border="0" cellpadding="3">
<tbody><tr>
<td><b>Stapelanfang</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">1
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">2
</td>
<td bgcolor="#C0C0FF" align="center"><b>4</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">3
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse ins Hauptprogramm</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">4
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">5
</td>
<td bgcolor="#C0C0FF" align="center"><b>3</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">6
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">7
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">8
</td>
<td bgcolor="#C0C0FF" align="center"><b>2</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">9
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr>
<tr>
<td><b>Stapelzeiger</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">10
</td>
<td bgcolor="#C0C0FF" align="center"><b>1</b> (Ergebnis)
</td></tr></tbody></table>
<p>Wiederum wird das Ergebnis mit dem Argument multipliziert (1*2). Zurück in die Fakultätsfunktion:
</p>
<table border="0" cellpadding="3">
<tbody><tr>
<td><b>Stapelanfang</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">1
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">2
</td>
<td bgcolor="#C0C0FF" align="center"><b>4</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">3
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse ins Hauptprogramm</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">4
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">5
</td>
<td bgcolor="#C0C0FF" align="center"><b>3</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">6
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse in die Fakultätsfunktion</i>
</td></tr>
<tr>
<td><b>Stapelzeiger</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">7
</td>
<td bgcolor="#C0C0FF" align="center"><b>2</b> (Ergebnis)
</td></tr></tbody></table>
<p>Das Ergebnis wird mit dem Argument multipliziert (2*3). Zurück in die Fakultätsfunktion:
</p>
<table border="0" cellpadding="3">
<tbody><tr>
<td><b>Stapelanfang</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">1
</td>
<td bgcolor="#C0C0FF" align="center"><i>Platz für Ergebnis</i>
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0e0FF" align="center">2
</td>
<td bgcolor="#C0C0FF" align="center"><b>4</b> (Argument)
</td></tr>
<tr>
<td>
</td>
<td>
</td>
<td bgcolor="#C0E0FF" align="center">3
</td>
<td bgcolor="#C0C0FF" align="center"><i>Rücksprungadresse ins Hauptprogramm</i>
</td></tr>
<tr>
<td><b>Stapelzeiger</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">4
</td>
<td bgcolor="#C0C0FF" align="center"><b>6</b> (Ergebnis)
</td></tr></tbody></table>
<p>Das Ergebnis wird mit dem Argument multipliziert (6*4). Zurück ins Hauptprogramm
</p>
<table border="0" cellpadding="3">
<tbody><tr>
<td><b>Stapelanfang</b><br><b>Stapelzeiger</b>
</td>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \rightarrow }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo stretchy="false">→<!-- → --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \rightarrow }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/53e574cc3aa5b4bf5f3f5906caf121a378eef08b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.324ex; height:1.843ex;" alt="{\displaystyle \rightarrow }" loading="lazy"></span>
</td>
<td bgcolor="#C0E0FF" align="center">1
</td>
<td bgcolor="#C0C0FF" align="center"><b>24</b> (Ergebnis)
</td></tr></tbody></table>
<p>Das Hauptprogramm muss dann nur noch das Ergebnis <i>24</i> vom <a href="Stapelspeicher" title="Stapelspeicher">Stack</a> holen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="Quicksort" title="Quicksort">Quicksort</a></li>
<li><a href="Endrekursion" title="Endrekursion">Endrekursion</a></li>
<li><a href="Programmierparadigma" title="Programmierparadigma">Programmierparadigma</a></li>
<li><a href="Entrekursivierung" title="Entrekursivierung">Entrekursivierung</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<div class="sisterproject" style="margin:0.1em 0 0 0;"><div class="noviewer" style="display:inline-block; line-height:10px; min-width:1.6em; text-align:center;" aria-hidden="true" role="presentation"><span class="mw-default-size" typeof="mw:File"><span title="Wikibooks"></span></span></div><b><a href="https://de.wikibooks.org/wiki/Rekursive_Labyrinthe" class="extiw external" title="b:Rekursive Labyrinthe">Wikibooks: Rekursive Labyrinthe</a></b> – Lern- und Lehrmaterialien</div></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2024-12-03" href="https://de.wikipedia.org/wiki/?title=Rekursive_Programmierung&oldid=250920143">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>